import requests
from PIL import Image, ImageDraw
from io import BytesIO


async def paste_image(over_url, background_url):
    # 发送 HTTP GET 请求来获取图像内容
    response1 = requests.get(over_url)
    response2 = requests.get(background_url)
    response1.raise_for_status()  # 如果请求失败，这会抛出异常
    response2.raise_for_status()  # 如果请求失败，这会抛出异常

    # 使用 BytesIO 将响应内容转换为文件对象

    image_bytes = BytesIO(response1.content)
    background_bytes = BytesIO(response2.content)

    # 打开背景图片和 overlay 图片
    background = Image.open(background_bytes).convert("RGBA")
    overlay = Image.open(image_bytes).convert("RGBA")

    # 创建与 overlay 同样大小的遮罩图片，并绘制一个白色圆形
    mask = Image.new("L", overlay.size, 0)  # 黑色遮罩
    draw = ImageDraw.Draw(mask)
    draw.ellipse([0, 0, *overlay.size], fill=255)

    # 应用遮罩到 overlay，得到圆形 overlay
    overlay_circle = Image.new("RGBA", overlay.size)
    for y in range(overlay.height):
        for x in range(overlay.width):
            # 如果遮罩的对应位置是白色（255），则保留 overlay 的像素，否则设为透明
            if mask.getpixel((x, y)) == 255:
                overlay_circle.putpixel((x, y), overlay.getpixel((x, y)))
            else:
                overlay_circle.putpixel((x, y), (255, 255, 255, 0))  # 透明像素

    # 现在，我们想要缩小 overlay_circle 的大小
    overlay_circle_resized = overlay_circle.resize((int(195), int(195)))  # 缩小图片

    # 计算 overlay_circle 在 background 上的居中位置
    background_width, background_height = background.size
    overlay_width, overlay_height = overlay_circle_resized.size
    left = (background_width - overlay_width) // 2
    top = (background_height - overlay_height) // 2

    # 将圆形 overlay_circle 粘贴到背景图片的中心位置
    background.paste(overlay_circle_resized, (left, top), overlay_circle_resized)

    output = BytesIO()
    background.save(output, format='PNG')
    image_bytes = output.getvalue()
    output.seek(0)

    # 保存最终的图片
    return image_bytes
